// 对象存储模块API接口

/**
 * 存储模块API
 * @param {Object} config - API配置信息
 * @returns {Object} - 存储相关API方法集合
 */
module.exports = function(config) {
  // 获取存储相关的API路径
  const storagePaths = config.paths.storage;
  
  return {
    /**
     * 获取对象URL
     * @param {string} path - 对象路径，如 'miniprogram-cdn/image.png'
     * @returns {Promise} - 对象URL信息
     */
    getObjectUrl: (path) => {
      return new Promise((resolve, reject) => {
        wx.request({
          url: config.getFullUrl(storagePaths.objectUrl),
          method: 'GET',
          data: {
            path
          },
          success: (res) => {
            if (res.data.code === 200) {
              resolve(res.data.data);
            } else {
              reject(res.data);
            }
          },
          fail: reject
        });
      });
    },
    
    /**
     * 获取签名URL
     * @param {string} token - 访问令牌
     * @param {string} path - 对象路径，如 'miniprogram-cdn/image.png'
     * @param {number} expires - 过期时间，单位秒，默认3600秒
     * @returns {Promise} - 签名URL信息
     */
    getSignedUrl: (token, path, expires = 3600) => {
      return new Promise((resolve, reject) => {
        wx.request({
          url: config.getFullUrl(storagePaths.signedUrl),
          method: 'GET',
          header: {
            'Authorization': `Bearer ${token}`
          },
          data: {
            path,
            expires
          },
          success: (res) => {
            if (res.data.code === 200) {
              resolve(res.data.data);
            } else {
              reject(res.data);
            }
          },
          fail: reject
        });
      });
    },
    
    /**
     * 文件上传
     * @param {string} token - 访问令牌
     * @param {string} filePath - 本地文件路径
     * @param {Object} options - 上传选项
     * @returns {Promise} - 上传结果
     */
    uploadFile: (token, filePath, options = {}) => {
      return new Promise((resolve, reject) => {
        wx.uploadFile({
          url: config.getFullUrl(storagePaths.upload),
          filePath,
          name: options.name || 'file',
          header: {
            'Authorization': `Bearer ${token}`
          },
          formData: options.formData || {},
          success: (res) => {
            try {
              const data = JSON.parse(res.data);
              if (data.code === 200) {
                resolve(data.data);
              } else {
                reject(data);
              }
            } catch (e) {
              reject({
                code: 500,
                message: '服务器响应解析失败',
                error: e,
                rawData: res.data
              });
            }
          },
          fail: reject
        });
      });
    },
    
    /**
     * 获取完整对象URL的辅助方法
     * @param {string} objectPath - 对象路径
     * @returns {string} - 完整URL
     */
    getFullObjectUrl: (objectPath) => {
      // 使用API文档中的对象存储地址
      return `https://objectstorageapi.bja.sealos.run/a0qepsyj-001/${objectPath}`;
    }
  };
} 